It might be better to flip that around ArcadEd. In your example it would be the time since the previous attack that would determine what attack you could perform (rather than time since previous), and I believe he's actually trying to prevent canceling the punch.
I would invert the meaning of your punchtimer like so:
variable punchTimer = 0
every Tick | subtract DT from punchTimer
then actions are only allowed if the punchTimer = 0. You can even prevent changes in direction or other actions that would cancel the punch. In this way, different punch styles can set the punchTimer to different values, so you can have more time to recover from a running punch than a idle punch, for example.
'Course, I could have also misunderstood what he wanted to do, too.