I have a page which does AJAX validation of an email before continuing on to the next page, using the HTML5 setCustomValidity() method [using the webshims library for older
I think you need to change a bit how you it works. Don't try to achieve blocking, but embrace non-blocking.
I would do like this: - Keep the validation on email; make it Asynchronous. When it's valid, set a flag somewhere in a variable to know it's ok. - Add a callback on the form.submit() to check whether the email is ok (with the variable) and prevent the submission if it's not.
This way you can keep asynchronous call without freeze the web browser UI.
-- [edit] --
This is some quick code I just wrote for the example based on what you already have.
For your information, a programming notion called "promises" (futures and deferred are other terms for it) has been invented to solve exactly the problem you have.
Here's an article on what it is and how to use them in JavaScript (using dojo or jQuery): http://blogs.msdn.com/b/ie/archive/2011/09/11/asynchronous-programming-in-javascript-with-promises.aspx