The same thing can be done in a kinda portable way with the pre/post substitution/expansion operators (at the moment don't recall their correct name):
for a in **/*.jade; do echo mv "$a" "${a%jade}pug"; done
If I'm not wrong it should work in Bash and Ksh too (bar the double * expansion), this when I don't have an Emacs at hand.In the first invocation I prefer to do a "dry run", if it looks good I proceed removing the echo.
P.S. Your example above should use double quote instead of single quote, otherwise the content is not expanded by Zsh
P.P.S. One recall the pre/post operator looking at the symbols on a US keyboard, the post follows the variable symbol...