I came to the similar idea (as like as enjoy the concept). As advice, I think you should change player’s position based on object scale. I mean, if a player stands on the edge of a block, when it scales, the player needs to stay on the edge. To achieve this, I ray-casted block under the Player and change the position based on Transform’s basis (Godot terminology). In code:
var origin_offset := global_position - ground_transform_previous.origin
var basis_change := ground_transform_current.basis * ground_transform_previous.basis.inverse()
var player_offset := basis_change * origin_offset - origin_offset
global_position += player_offset
Also, for scaling I use mouse wheel.