The code in (2) m.parse(myString) compiles because calling the method on it equals to addressing and then calling the method on the pointer, i.e. (&m).parse(myString):
If x is addressable and &x's method set contains m, x.m() is shorthand for (&x).m()
However this shorthand is not available in (3) MyObj{}.parse(myString) because the literal MyObj{} is not addressable. From the specs: "Address operators":
The operand must be addressable, that is, either a variable, pointer indirection, or slice indexing operation; [...or other cases that don't apply].
And MyObj{} being a composite literal is neither of those; whereas m from example (2) is a variable.
Finally the same section about address operators specifies an exception that explains why the example in (1) (&MyObj{}).parse(myString) compiles:
As an exception to the addressability requirement, x may also be a (possibly parenthesized) composite literal.
In this case you can take its address, parenthesize it and call the method, which is syntactically similar to the compiler shorthand for (2).