I do not know of any single tutorial for this purpose. What I did, I designed my own libraries (including level shifters) which were compatible with MSV design.
I used the following tools (this flow also adds the level shifters in the netlist automatically after specification in CPF):
Cadence Virtuoso: Schematic, layout
Cadence Abstract Generator: To generate the abstract views for the SOC Encounter
Virtuoso LEF Out: To generate the LEF file of the libraries (or a single level shifter if you will, then include in whatever .lef file you are using)
Encounter Library Characterizer (ELC): To generate the .lib file (an entry for the level shifter may be written manually)
Encounter RTL Compiler (RC): For the synthesis of the HDL code
Common Power Format (CPF): For controlling the power domains, level shifters and other low power stuff already at RTL level
SOC Encounter: For place and route
This flow would give you control over the libraries, level shifters and power domains from front- to back-end. The advantage is that here you are not adding stuff at the back-end and then converting back-end stuff back to the front-end to do verification (LVS).
If you wish to include a custom level shifter into your flow without adding it in the netlist you would still need to design/write a schematic, layout, abstract, .lib entry (?), .lef entry and use SOC Encounter to place and route the level shifters.
This is the only approach I know if you do not have a level shifter in your existing library. However, perhaps someone else knows of a simpler approach.