Put ham bone in a large soup pot. Add quartered onion. Add enough cold water to cover ham. Cover pot and gently simmer for 3 hours. Cook until bone is stripped of all meat, fat, gristle and marrow. While ham is cooking, put beans in a bowl. Add enough water to cover beans.
When ham is done, remove bones from pot and skim off all but a few tablespoons of fat. Remove meat from fat and finely chop. Put chopped meat back in pot. Drain beans and add to pot. Add onions (chopped) and garlic. Cover and simmer for 1 hour. Add more hot water if needed. At end of hour add tomatoes and bay leaf. Cook for 30 minutes, until beans are tender. Taste and season with pepper (to taste). Allow to sit for 1 hour and serve.