[WIP] Argument type validation with user-friendly error messages

I consider `JSON_TYPES` a constant, something that is not overridable. Basically the same as `TARGET_MAP`