You are right when you say "it depends." It depends on what your data will be used for OLTP, you would look at the normalized design and reporting system that you would like the data to be abnormalized using contact information in accordance with other data components.
A normalized database may also discuss the level of normalization. Some will say that the contact information is grainy, as in the first scenario. I like the middle of the road. I would get all the contact information in one table, which included the address, phone and email.
Contact ID, Address, Address2, City, State, Zip, Phone, Email
Then create a relationship with a separate table
CompanyContact ID, CompanyID, ContactID
This, too, could be integrated into the company table by simply adding the ContactID table to the company and avoiding a separate relationship and join.
You can also implement a table with ContactTypes .
ContactType ID, ContactType 1, Company 2, Charity 3, Auditor ....
You can then specify this in the CompanyContact table and remove the relationship requirement. Although it matches your scenario of 1 contact for each type, it leaves no room for growth.