Heat a large dutch oven or pot on the stove over medium heat.
Add the butter and let melt, then add in the diced onion.
Saute for about 5-7 minutes or until they are transluscent.
Add in the garlic and saute an additional 1-2 minutes.
Add in all remaining ingredients and reduce the heat to low. Let simmer for about 10 minutes.
Use an immersion blender or transfer to a regular blender and puree until completely smooth. I love using an immersion blender for the convenience, but I do think you get a much smoother texture using an actual blender.
After you blend, stir in the parmesan. Taste and adjust flavors as desired. Garnish with some heavy cream, basil, red pepper and serve with grilled cheese if desired. Enjoy!