Without posting your code, it's difficult to figure out exactly what is causing your problem.
If I understand correctly, you're saying that whenever the EntityArrow hits a target, the arrow instantly floats in midair several blocks before the target? If so, it's possible that the error is caused by an incorrect variable.
From my limited understanding of the EntityArrow class, the motion of the entity should be tracked in the setThrowableHeading method. In the onUpdate method, it checks if the position vector has collided with a solid block's vector, in which case it sets the boolean inGround to true. From there, the client renders an arrow in whichever block the vector collided with. If it's teleporting, you may have the location where the arrow sticks somehow translated before the arrow is rendered in the block.
If your error is that the arrow visibly bounces off the target, it may be because inGround is never set to true. If this is the case, most likely you misplaced a variable in the if statements prior to it.
My best advice would be to go over your variables with a fine-toothed comb and make sure that they are the same as EntityArrow's. Unless you are trying to change what the arrow does, every method should be identical to the original class. Furthermore, you can test other sections of your code in-game. Does the arrow still damage entities? Does it stick properly in them? Can you shoot yourself by shooting up? Does it stick properly in you?
After double-checking your classes and doing more testing to try to figure out exactly what's wrong, I suggest you start up your mod in debug mode and change the appropriate method in real time.
Good luck! You can figure this out; if you'd like more help from me and others, post your code to make our lives easier.