When using a Velocity scripted my.token, the default value is not being used if the field the Velocity script is pointing to is not populated.
The reason for this is because Velocity script isn't designed to consider a default value the way that a lead token would. It's designed to execute the code to provide the rendered value. Although the UI specifies to look for a default, that's ignored by design since the code itself is only looking for the value for those leads. If the goal is for it to evaluate and provide a known value, otherwise then render a specified default, that needs to be built into the Velocity script code itself.