Maybe there is another way. I consider parsing/model building one concern and validation of the model another concern. So maybe validation could be a second pass after the model is built.
So instead of doing validation in places like createDocletTag() you instead build the model up as is done today.
Then later you something like
QDoxTagValidator validator = ...; //Created from schema file or whatever
foreach( JavaClass clazz )
validator.validateClass( clazz );
This keeps code simple and makes it possibel to do much more intensive validation without effecting parsing (and having to do validation during parsing at all.
There are two parts of the validation.
1) Warn/barf when an unknown tag (like @plop) is encountered. This logic can and should be part of a DocletTagFactory implementation. The createDocletTag(String,String) method could barf.
2) Let the tag validate itself. This requires a validate() method on the DefaultDocletTag, because it should be called by QDox.