Due to the popup decision, there is no way to do any form of asynchronous validation on the page that the PayPal button is installed on (your cart or in our case the checkout page). The official recommendation is to perform any asynchronous validation in the background continuously while the form is being filled and then display the results when the PayPal button is clicked. For many people this can work, however, the minute you have to do anything on the server side such as calculating shipping costs or an address validation (using a service that costs real money) this cannot work.
The only other way around it for us is to completely redesign our checkout flow from a single page (from the users perspective) to a multi-stage process where we can do all the validation we need on a ‘delivery’ page before moving onto a ‘payment’ page that requires no validation as you just click the payment method needed. This takes a maybe one day project to add PayPal to at least a weeks worth of work and the added risk of a new checkout flow and the impact on the dropout rate.
Please PayPal, give us an iframe option, like stripe checkout!