This is an old topic, but worth resurrecting.
Is that locks away the function name from being used as a map key. What do I mean? Let's rewrite it with a different notation, just to emphasize that it is indeed a map:
mynode:
 type: MyType
 properties: name:
ÂÂÂÂÂ get_input: site
Now imagine this definition:
MyType:
 properties:
ÂÂÂ name:
ÂÂÂÂÂ type: map
As you can see, the parser has no trivial way to distinguish "get_input" from being a function call vs. being a literal key in a map with a single key.
There's another more subtle problem. if someone tries to call a non-existent function, they would get a confusing error, e.g.:
mynode:
 type: MyType
 properties:  name: { get_output: site }
There's currently no "get_output" function in TOSCA. But, the error would not be about a non-existing function, it would be about trying to assign a map to something that is not a map. Things could get even worse if the property type actually is a map! The service template will be silently processed, and the user would not even know that the supposed function was not processed! It could lead to very hard-to-find bugs.
I propose adding a prefix character to all function calls. I'll arbitrarily choose "!". E.g.:
mynode:
 type: MyType
 properties: name: { !get_input: site }
All these problems now disappear. When encountering a "!" prefix for a map with a single key, the TOSCA parser will expect it to be a function call and will emit a clear error if the function name is not recognized.
You might be asking how to handle a literal map with a single key that really has a "!" prefix. Well, we can support escaping using a double prefix, e.g.
mynode:
 type: MyType
 properties: name:
ÂÂÂÂÂ !!not-a-function: site
The double "!!" will become a single "!" and it will not be treated as a function call. This is deterministic and, as long as it's documented, should not be confusing, especially since it would likely be a very rare use case.