CSS valid and invalid states do this (validate before you even had a chance), and basically it's telling me I'm a freaking retard before I even get the chance to prove that. Which is annoying to the max.
It's like insulting people as they walk into your house, and then if they don't act like jerks, apologising and welcoming them belatedly in. Bleh.
Onblur validation can be useful or annoying, and I would say test that per input on people. Like if users are asked to repeat an email address or password, it's nice to know right away that they don't match, rather than waiting til you get to the bottom and try to submit.