Put the coconut milk, whole milk, and shredded coconut in a medium saucepan. Bring to a simmer over medium heat, stirring occasionally.
Meanwhile, in a large bowl, whisk sugar, salt, egg yolks, and cornstarch (mixture will be thick). Once the milk is simmering, remove the saucepan from the heat and very slowly pour 1 ½ cups of the warm milk into the egg mixture, whisking constantly as you pour (this will help slowly bring up the temperature of the eggs). Whisk really well to break up any lumps, and make sure that the hot liquid is added very slowly.
Pour the warmed egg mixture into the saucepan and bring the whole mixture to a simmer over medium heat. Alternate whisking and stirring with a rubber spatula. After 3-5 minutes, it will be bubbling and thickened. Remove from the heat and stir in the vanilla extract and butter. Transfer to a bowl and refrigerate until chilled.
Assembly:
Prepare the whipped cream: Using a hand mixer or stand mixer, whip the cream, powdered sugar, and vanilla extract for several minutes until thickened.
Top the cooled custard with whipped cream, and garnish with toasted coconut.
Notes
To toast coconut: Place sweetened shredded coconut (I used about ⅓ cup) in a dry skillet over medium heat. Stir frequently until toasted and golden brown, several minutes. Watch it closely, it can burn quickly. Cool toasted coconut before topping the dip.