Well if you have a single call in a for-loop, you will still have one call to the hook per time it was applied. So that works for rnn as well 
def print_grad(grad):
    print(grad)

for i in range(4):
  z *= w
  z.register_hook(print_grad)

That will register one hook per iteration of the loop.