It's fine if the json ends up looking similar, but each runtime can have support functionality (either now or in the future), so they should advertise themselves properly. The client should know what runtime is being used so view functionality can be registered for one runtime and not another. Also, deserializing a pig type back to java requires the pig classes, which would mean cascading would rely on pig to deseriaize back to java.

The classes need to be distinct since there is a 1:1 in jackson from JsonTypeName to the class that the json deserializes to. They can extend from a common super-class (i.e. MRJob) if that makes sense.