Tamura Jones has a useful and (recent) roundup of GEDCOM validators at http://www.tamurajones.net/GEDCOMValidation.xhtml . If we have a hero who is prepared to improve Paul Johnson's validate() function, he or she might take the best ideas from those programs.
I agree with the comments by Darren Duncan and Steve Woodbridge. To me, a validator simply provides a report; the only "error" condition is if the file cannot be parsed. All other outputs are simply warnings of varying severity. The list of possible inconsistencies in a GEDCOM file must be endless, but in my experience problems of the "brothers and sisters have I none, but that man's father is my father's son" type are rare. My biggest gripe is GEDCOM's free-form dates: for example, is 1/2/88 the first of February, or the second of January, and is the year 1988, 1888, 1788 [...] ? Date::Manip is useful, but cannot cope with that case (and many others). An option reporting "ambiguous or unparsable date" would be extremely useful. - Mike