If the vast majority of your market is upgrading, and the customers for your new product, are by and large the same as the customers for your previous product, then you can simply offer the upgrade price to everyone, without loss of revenue. Indeed, you make it easier for new customers to come on board - so, best of both worlds.
I'm not sure what's wrong with offering major new versions of your product at the upgrade price to everyone (new and existing users alike). Sounds perfectly sustainable.
This may be the "least bad" choice, but it still isn't a good one. Besides the lost revenue from new customers, Wil mentions another important problem: If existing and new customers are charged the same price for an upgrade at least some existing customers are likely to consider it unfair (especially given past practice in the software industry) and to be angry about it.
That may or may not be a rational response. After all, if someone thinks an upgrade is worth $X, why should he or she care whether or not a new customer is getting the same price? On the other hand, a developer demonstrating that they value customer history and loyalty (with a discounted upgrade) is a strong signal that they value the long-term customer relationship. That is something a customer could rationally care about. Either way, the potential for existing customer anger is a problem developers will have to deal with.
Wil's post might also be a pre-emptive strike against potential, future customer anger. After all, if a customer complains that they're not getting a discounted upgrade, he can point them to this post.
I'm not sure what's wrong with offering major new versions of your product at the upgrade price to everyone (new and existing users alike). Sounds perfectly sustainable.