validate() now has an optional path argument