Thanks, great force.
You are right in everything, the problem is that we are making a standard model with no issues, because it is a layer over the box2d to be used in our own games engine and develop any kind of videogame, so we are trying to avoid this kind of issues. That's why im trying to avoid the use of 'tricks' ike that of not to jump in the next X frames.
I will explain step by step what i get from Box2D.
The moving box is a
width=0.4f, height=1.0f, density=0.5f, restitution=0.0f, friction=0.6f, isSensor=false. The size is quite short, in this way we avoid some issues of velocity and gravity (with a bigger box, if it is moving fast horizontally in the air, the gravity seems not to affect it until we stop aplying that horizontal force).
Here wonderful graphics (each step is what i see after world->step. Forces are applied before world->step):

Step1: The body is falling. There's no b2Contact.
Step2: The body is near to the ground, and
not touching it. A new b2Contact is returned by BeginContact callback.
IsTouching=true. TOI flag=true.
Step3: The body touch the ground for the very first time. The b2Contact is alive, IsTouching=true, TOI flag=true. TOI flag will keep true for 5 or 6 frames.
Step4: The body is lying over the ground. The b2Contact is alive, IsTouching=true, TOI flag=false. If I apply a horizontal force in this moment, TOI flag will be true, so I can't use it to determine if the body is 'really' touching the ground.
Step5: I applied vertical impulse before word->step. Then the body gets the power and it separates itself from the ground. The b2Contact is still alive, nothing has been returned to EndContact callback.
IsTouching=true, TOI flag=true. And the body is not touching the ground :/
Step6: Second frame after apply jump impulse. Body farer from the ground, EndContact callback has been called. b2Contact is destroyed.
Some idea about what is happening?