Preheat the oven to 350. Gather all the ingredients.
Grease a bundt pan with butter and sprinkle white sugar all over it. Make sure to coat the pan well with butter and sugar. Set the pan aside.
Mix all the milk mixture ingredients together. Measure out the rest of the flan mixture ingredients and the ingredients for the topping (if using).
Add all the ingredients (except the topping ingredients) into a blender and mix until smooth. If you don't have a blender, use a regular mixer or a stand mixer
Pour the mixture into the bundt or round pan.
Prepare the Bain-Marie and bake the flan for 45-55 minutes. Insert a toothpick into the side of the flan and if it comes out clean, it's ready. The flan will still jiggle in the middle.
Remove from the flan from oven but leave the pan in the Bain still. Gently run a butter knife around the edge of the flan to loosen it. Let the flan sit in the Bain for 30 minutes. .
After 30 minutes, take the flan out of the Bain and place it on a rack to cool. Then run the butter knife around the edge of the flan again. Let the flan cool on the rack for 1 hour.
Place a large plate on top of the flan pan and invert the flan onto the plate. Let the flan sit on the counter for another 2 hours.
Cover the flan with plastic wrap, place in the fridge for 2-4 hours or overnight to chill and set. The longer it chills, the better it will set.
Take the flan out of the fridge and place on the counter. Then place all the ingredients for the topping in a double boiler whisking continuously until the mixture is smooth and melted. You can melt the peanut butter on its own and drizzle onto the flan separately or skip it altogether.
Top the flan with the melted chocolate topping and add your choice of garnish. If not serving immediately, put the flan back in the fridge.
Serve with or without a side of whipped cream.