But your method 3 does work properly in the air, even if I disable the part that sets the vY to 0 when it's in the air. I think that's quite logical as how the eventsheet works.
1. Process velocity
2. Set velocity (jump)
3. next tick
The behavior however seems to be processing gravity and velocity in a different way. Perhaps what it does is to first process velocity, then apply the new velocity after. I think behaviors are usually run after events, so it would look a bit like this:
1. Events
2. Process velocity
3. Set velocity
4. next tick
So it would first process the velocity at vY=0+gravity*dt, resulting in 1 tick of falling, then set the new velocity, which is then processed 1 tick later. To correct this it would have to set velocity before processing it as such:
1. Events
2. Set velocity
3. Process velocity
4. next tick
It's just a messed up order of operations I believe.
EDIT: It seems that actually, the objects velocity before jumping has no impact. If I set it to -9000000 the cube should shoot into the air. It just does the same, framerate dependent jump. So it's not that the cubes velocityY is processed first before setting the new velocityY, it's that at some point for some reason, a tick of gravity is added deliberatly. So it can very well be some kind of edge case bugfix, which the platform behavior is full off.