This is a good rundown of some methods (and mistakes) that people may make when implementing jumping. But I can't say I agree completely with the conclusion.
The decreasing force solution isn't that clean and it seems considerably more difficult to calculate/plan for in terms of level design. But for the genre it was used in, that probably doesn't matter.
More important is whatever feel was judged to be a good fit. I've certainly gone through the jetpack phase in my earlier days of programming platformer physics from scratch. I didn't even know about fixed timestep back then.
But for a more discretely designed platformer with exploration-heavy levels, I find that the simpler jump solution that's nicely controllable is a variant of "The Velocity Cut".
Basically: Instead of making the velocity.y 0, you can halve it or reduce it by some factor so the jump stops but still has palpable inertia to it. It actually feels like Mario or Megaman to me. I wouldn't be surpised this actually was their solution for the classics.








