Heat a soup pot or tall heavy bottomed pan. Melt the 4 tablespoons of butter.
Add the flour, whisking continuously for at least 4 minutes or till you get a thick, pale brown or pinkish roux. Whisking is required if you don't want the flour to catch at the bottom of the pan and burn.
Add the milk (or half and half if using), whisking it in so the roux blends into it.
Add the stock, again whisking it in. I used vegetable stock however chicken stock would also be good in this soup.
Keep on low heat, and simmer for 15 minutes or till the liquid thickens, whisking periodically and checking that nothing sticks to the bottom of the pan. The mixture will reduce as it simmers.
Add the broccoli and carrots.
Add the nutmeg and paprika, bayleaf, Madras curry powder/ cayenne pepper, black pepper and salt. See Handy tip 2 below.
Bring the soup to a quick boil and then let it simmer on low flame for another 15 minutes checking that the carrots and broccoli are tender.
Switch off the stove and let the soup cool sufficiently to be blended/ pureed, so you don't work with very hot liquid.
Once cool, remove the bay leaf and blend/ purée the soup, in batches if needed. The brocolli and carrot do not need to be finely pureed, a few flecks or bits would add to the appearance and texture of the soup.
Set the soup back on the stove, warm it and add the sautéed onion and garlic, chopped thyme, sage and basil.
If using dry herbs, add about 1/2 tsp of basil and a 1/4 tsp each of thyme and sage.
If not serving immediately, switch off the stove and keep the soup covered.
5 minutes before serving, warm up the soup, add the cheese, ( reserving 2 tablespoons of the grated cheddar for garnish ). Use good quality sharp cheddar, to bring out the full flavours of this soup.
Whisk the cheese till it blends into the soup. Once the cheese melts completely, about 1-2 minutes, turn off the stove.
Serve really hot, garnished with mint leaves and minced broccoli and sprinkled with cheese, with a platter of chunks of warm bread alongside.