Here's the piece I forgot to add to my code that tripped me up...
<context-param> <param-name>facelets.LIBRARIES</param-name> <param-value>/WEB-INF/faces/foo.taglib.xml</param-value> </context-param>
<context-param> <param-name>facelets.LIBRARIES</param-name> <param-value>/WEB-INF/faces/foo.taglib.xml</param-value> </context-param> You'll also want to change check="([a-Z]^)" to regex="..."check="([a-Z]^)" to regex="..."
I like this approach because there's no need to extend ValidatorELTagValidatorELTag. I'm a very big fan of facelets and this is one more cool feature.