I would maybe change API to not validate, but to be able to transform args. So default implementation just passws `args` to return. But then other implementations can both clean, normalize and validate. And then you can also easily inherit implementations (so you always first call parent implementation, get resulting `args` and then work on that.