Yes it's possible, however modifying ShapeNode won't work in this case (at current moment in 2.0 it's just a helper for body.)
You can do this by using interface that is provided by CollisionBody object, you can use following methods:
void add_shape( Shape shape, Transform transform=Transform() )
int get_shape_count()
void set_shape( int shape_idx, Shape shape )
void remove_shape( int shape_idx )
void clear_shapes()
Usually I'm doing this by adding every possible shape (that I might want to use) to the scene, and then in ready:
#setting default shape
self.clear_shapes();
var defaultShape = shape get_node("DefaultShape").get_shape();
self.add_shape(defaultShape);
This is the way how you can change collision shape of a body at any time in runtime.