If you haven't tried it yet try lerp-ing the velocity. This is a trick that comes from old games like Supper Mario, cheap way to simulate friction.
Velocity = OldVelocity.linear_interpolate(Velocity, SmoothValue)
At the end of the physics step you need this, it keeps the old velocity value for the next pass:
OldVelocity = Velocity
Then to prevent it from breaking terminal velocity do something like this:
var TerminalV = 10
if Velocity.length() < TerminalV :
Velocity = OldVelocity.linear_interpolate(Velocity, SmoothValue)
OldVelocity = Velocity
Play around with this. I recommend you do some research on the old games. Look at Gamasutra for game development advice and research on old games.