i don't think this is duplicate of issue #4357, because custom JSONMarshaler still need
a way to skip marshaling the field (sort of IsZero and JSONMarshal combined).
I'm just using issue #4357 as an example.
It seems like a bad idea to conflate them. Go typically doesn't use
sentinels. I think the IsZero approach is much clearer, plus you get
the benefit of being able to control the omission with omitempty.