Melt the ghee in a large saucepan over a medium heat. Add the onions and fry for 20 minutes, or until golden-brown and caramelised. Remove the onions from the pan and drain on kitchen paper. Reserve the ghee.
When cooled, place the onions in a pestle and mortar or spice grinder and grind to a paste.
Place the yoghurt in a large bowl and mix in the ground onions, salt, chilli powder, coriander, garam masala, white pepper, gram flour, ground almonds, poppy seeds, cardamom, mace, papaya, saffron infused milk, clotted cream and kewra water. Mix well to combine.
Place the lamb in a large roasting tin and make small slits all over with the tip of a sharp knife. Rub the lamb all over with the yoghurt marinade, then cover and place in the fridge for 3 hours. After 3 hours, make more slits in the lamb and rub the marinade in again, picking up any that has dropped into the tin. Cover and put back in the fridge for another 3 hours. Alternatively, marinate the lamb in the fridge overnight.
One hour before cooking, remove the lamb from the fridge and preheat the oven to 200C/180C Fan/Gas 6.
Roast the lamb for 1 hour 40 minutes, basting regularly with the ghee leftover from the onions. To check whether the lamb is done to your liking, using clean hands, touch the top of the thickest part of the lamb leg. If it feels soft to the touch, the lamb is rare. If it feels springy, it is medium. If it feels firm, it is well done.
To serve, place the whole leg of lamb on a serving plate and carve into thick slices at the table.