It's quite possible, you just need 2 mapping tables, so instead of having a source column in addresses, you would have a profile_address and school_address tables. You would need to specify unidirectional (one way) going from profile to address and school to address.
Edit:
in the standard example of giving a user roles you would have:
/**
* @ORM\ManyToMany(targetEntity="Role")
* @ORM\JoinTable(name="user_role",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
* )
*/
protected $roles;
now lets say you wanted to have another object, let's say bystander that you wanted to have roles for as well, you would have:
/**
* @ORM\ManyToMany(targetEntity="Role")
* @ORM\JoinTable(name="bystander_role",
* joinColumns={@ORM\JoinColumn(name="bystander_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
* )
*/
protected $roles;
that's all there is to it.