Any sequence asynchronous counter
Asynchronous means you don't have a clock signal to control the counter. There is no arbiter that will tell you when the outputs are valid. This implies that subsequent stages cannot tolerate any glitches in the counter. This in turn means you want only a single bit to change between two counts. For every current combination of output levels, you can uniquely identify the next step.

In Dutch it is called a univariante code, I don't know the proper English translation for it, but means that between every step only a single bit will change. Wikipedia writes: "two successive values differ in only one bit". Gray code is a well known example for this. As at every moment only a single bit will change, you still get a stable counter which runs at the maximum speed of the silicon. It also means you cannot use just any arbitrary sequence you like.

If you want an arbitrary sequence, you can use output logic for your outputs but you will get glitches: illegal temporary values caused by difference in port propagation delay.

A sequence like this is easy to design using a Karnaugh map. Just make a loop without interruptions of your desired length. Here is an example 12 stage code I just made up.