I've been trying pretty hard to do this but how do you assign a players mob to a certain mob path such as mob/Kirby. I know you can do it in a client proc, but how do you do it elsewhere?
Is this too simple? You may mean something else. This will leave the current mob icon on the map and switch the player to a new mob. You can do this until your map is nice and littered with old mobs.

When the player logs in the first time, they are just a /mob and look like "player". When the player clicks ChangeMob, this assigns the player to a /mob/player type and makes them look like "player2".

icon = 'test2.dmi'
icon_state = "player"
icon = 'test2.dmi'
icon_state = "player2"//all mobs have this attribute
var/mob/player/m = new()
m.client = usr.client

If you want to get rid of the old mob icon, you can call usr.Del(); after you reassign it.