Nice! I usually use a timer for jump buffering and im never happy with it - I'll steal your method for next time :) thanks for the explanation!
One thing I forgot to mention: have to ensure velocity.y is down (positive), but that isn't tough or weird.