Most major browsers except IE9:
http://jsfiddle.net/tdoherty/nxB39/
If I step trough the code from the .valid() call, all four required fields are flagged, but if I let it run in real time it only ever displays the first two.
Reproduced in Firefox 11.0, Chrome 18.0.1025.162 m, Safari 5.1.5, Opera 11.62
This was due to the .focus() call in the highlight() call which in turn triggers the onfocusin callback to unhighlight() the element.