Prepare the roux: melt 2 Tbsp butter or margarine in a small saucepan; stir in the flour. Cook 3 minutes over low heat, stirring constantly; cool.
Wash and trim the broccoli; separate the stalks. Reserve several florets for garnish; chop the remainder into 1/2-inch pieces.
Saute the onion in the remaining butter in a large saucepan until tender. Stir in the broccoli; cover. Cook 3 minutes.
Stir in the stock or broth; heat to simmering. Stir a small amount into the cooked roux until smooth; return the mixture to the saucepan, stirring until smooth. Simmer, covered, until the broccoli is tender (about 30 minutes).
Remove from heat; cool slightly. Puree in a blender; return to the saucepan.
Blend the cream into the soup. Taste; add salt and pepper if needed.
Cook the reserved florets in boiling salted water until tender. (You can mix these into the pureed mixture.)