This is the inverse of a problem I was working on a few months ago.
If there are attributes in both features with which to do a regular join, joining the building polys to your address points and then using the Copy Features tool as described in this question's answers may allow you to do what you're trying to accomplish. Also mentioned in another answer there is the Make Query Table tool, which could also get you what you want. If a common attribute doesn't exist, it may be faster to create and populate one than the following option.
Update: After a little reading I'm not entirely sure why a spatial join didn't work for you. If Buildings are
join, and you set the join operation to
one-to-many (which a regular join cannot do, as it will only return the first matched record),
that should result in an output of a building poly for every address
point per the help file. However this might be failing
because there are already multiple polygons stacked, resulting in a
If there are no common attributes and a spatial join is your only choice, I believe you have already found your solution - you just need to iterate it. It's brute force and could use a model/scripting, especially if you want to do it on a recurring basis, but the process would be:
Spatially join the points to the polys using a one-to-one operation. This only matches the first record returned in the one-to-many. Save the results (SJ1) somewhere.
Now make a copy of your address points (ADworking) and using either a nested SQL selection query (both must be in a geodatabase) or a join, select all of the records in ADworking that have a match in SJ1 and delete them. ADworking should now contain only address points that don't yet have their own poly.
Repeat the spatial join, now between ADworking and the building polys, saving the result as SJ2. Once again, only first record returned is matched, so repeat the selection/join between ADworking and now SJ2 to delete records in ADworking that have been matched.
You will have to repeat this process as many times as the maximum number of points in any single poly. If you get down to a few polys that have excessive address points compared to the rest, manual duplication and editing might be faster if the process hasn't been automated. When complete, you can merge all of your spatial join results and you should have essentially converted all of your points to polygons, including duplicates of the same poly with different addresses.