Heat the milk in a small saucepan until it bubbles, then remove from heat. Stir in the margarine, sugar and salt until melted. Let cool until lukewarm. In a small bowl, dissolve yeast in warm water. Let stand until creamy, about 10 minutes.
Pour milk mixture into a large bowl. Beat in eggs, 1 1/2 cup flour, cardamom and yeast mixture. Cover and let stand for 20 to 30 minutes, or until bubbly.
Stir in the remaining flour, 1/2 cup at a time, beating well after each addition. When the dough has pulled together, turn it out onto a lightly floured surface and knead until smooth and supple, about 8 minutes. Lightly oil a large bowl, place the dough in the bowl and turn to coat with oil. Cover with a damp cloth and let rise in a warm place until doubled in volume, about 1 hour.
Deflate the dough and turn it out onto a lightly floured surface. Divide the dough into three equal pieces and then divide each piece into thirds. Roll out with your hands until the pieces are long enough to braid. Braid three pieces together to form a loaf; repeat twice to make three loaves. Place on lightly greased baking sheets and let rise for 40 minutes, until nearly doubled. Meanwhile, preheat oven to 350 degrees F (175 degrees C).
Bake in preheated oven for 30 minutes, until golden brown. Move to a wire rack to cool completely.
In a small bowl, mix together butter and confectioners' sugar. Stir in vanilla and 2 teaspoons milk to make a spreadable frosting. Spread the frosting over the cooled bread.