There is also some information in Compound Steps in Sampling — PyMC3 3.11.4 documentation
In general, you can inherent from ArrayStep, and implemented the astep method:
You can take a look at some older PR where a new MCMC step method is added: Add DEMetropolisZ stepper by michaelosthege · Pull Request #3784 · pymc-devs/pymc · GitHub (be aware of the style and syntax change in v4 tho)