On technical note - to circumvent the issue of the user being annoyed by validation happening while they are still working, establish user intent via a timer. Example in jQuery:
jQuery( element ).keyup( function( event ) {
/* User just entered something, start timer over if it exists */
clearTimeout( itent_delay );
/* Schedule your validation function to be initiated in 1.6 seconds */
itent_delay = setTimeout( function () {
validate_field( element );
}, 1600 );
});dadsf
Depending on the type of information being entered, you may want to use a different intent interval. For instance, for a password field, you could make it instant so the user is immediately notified regardless the validity/strength of their password.
On the other hand, for an e-mail field, using a 1.5-2 second intent interval is appropriate, in my opinion.