The broth: In a 4-quart soup pot, melt the butter over medium heat. Add the onion and cook, stirring frequently, until lightly brown, about 5 minutes. Scoop out half of the onion and set aside. Add the broth and potato, partially cover, and simmer over medium-low heat for 20 minutes.
The blossoms: While the broth is simmering, clean the squash blossoms: break off the stems, then the little green sepals that come out from the base of the blossoms (they originally covered the buds). Use your fingers to break loose the long pistils in the center of each flower and discard. With a very sharp knife, cut the blossoms cross-wise into 1/4-inch strips, including the bulbous base.
Add half the blossoms to the broth and simmer 3 minutes. In a food processor or in batches in a loosely covered blender (or using an immersion blender), puree the mixture; return to the pot.
The chiles: Roast the chiles directly over the gas flame, on a medium-hot gas grill, or 4 inches below a very hot broiler. Turn occasionally, until blistered and blackened on all sides, 5 to 6 minutes for the flame or grill, about 10 minutes for the broiler. Cover with a kitchen towel and let stand about 5 minutes. Peel off the charred skin, cut out the seed pod, then quickly rinse to remove straggling bits of skin and seeds. Cut into 1/4-inch dice.
Finishing the soup: Add the chiles to the soup along with the milk and reserved onion; bring to a simmer and cook for 10 minutes. Add the zucchini and corn, simmer a couple of minutes, then add the remaining squash blossoms. Simmer a couple of minutes longer (the strips of blossom will soften into deep-golden "streamers"), remove from the heat, stir in the cream, taste, and season with salt. Serve in warm bowls garnished with the chopped epazote or parsley.