Wash and rinse the beans and discard any debris or dark-colored beans.
In a large stockpot, combine the rinsed beans, the ham hock, and 4 quarts of water. Over high heat, bring to a boil, then simmer over low-medium heat until the beans are soft (about 2 hours).
When the beans are almost ready, melt the butter in a medium-sized skillet. Add the garlic, onion, carrot, and celery, and saute until all the vegetables are soft.
Add the softened vegetables to the beans and stir well. Remove the ham hock from the soup and cut the meat into small bite-sized pieces. Add the meat back into the soup.
Use a potato masher to slightly mash some of the beans - this will give you a nice velvety texture. Season soup with salt and pepper before serving.