In Arc, my immediate approach would be to define 'push as a macro, but also to give it a procedure version that's just a little more verbose. Then we can extend the procedure version and leave the macro version alone.
Here's some working Arc 3.1 code, which calls the macro "my-push", rather than overwriting Arc's own 'push: