We require all upgrades, whether existing client or prospect, to agree to a billable pre-upgrade analysis. This analysis typically, depending on number of mudules, users, customizations, etc. takes anywhere from 4 - 6+ hours. When complete I submit a detailed upgrade scope with the cost. If they choose not to upgrade, the analysis is still billable. We have been using this method since 4.0 and it works really well for us. The analysis is not fixed, but the upgrade will be.
When a request comes in, I send a request form outlining the terms as well as the current SPM, they sign the request acknowledging that the analysis is billable, and at that point I schedule the analysis. If it is a new support prospect the analysis is pre-pay.