1 stick butter
1 whole onion, diced
1/3 cup all-purpose flour
4 cups whole milk
2 cups half-and-half
1 pinch nutmeg
4 heads broccoli, cut into florets
Salt and freshly ground black pepper
3 cups grated cheese (mild Cheddar, sharp Cheddar, Jack, etc.)
Chicken broth, if needed
Melt the butter in a pot over medium heat, and then add the onions. Cook the onions for 3 to 4 minutes, and then sprinkle the flour over the top. Stir to combine and cook for 1 minute or so, then pour in the milk and half-and-half. Add the nutmeg, and then the broccoli, a small dash of salt and plenty of black pepper.
Cover and reduce the heat to low. Simmer until the broccoli is tender, 20 to 30 minutes. Stir in the cheese and allow to melt.
Taste the seasonings and adjust if needed. Then either serve as is, or mash with a potato masher to break up the broccoli a bit, or transfer to a blender in two batches and puree completely. (If you puree in a blender, return the soup to the heat and allow to heat back up. Splash in some chicken broth if needed for thinning.)