You can use arcpy and the da.Search/Update/InsertCursors:
import arcpy
points = 'placehere' #Change
polygon = 'copyme' #Change. Must only contain one polygon which is used as template. This feature class will modified so backup/make a copy if you want to keep one unchanged.
coordinates = [i[0] for i in arcpy.da.SearchCursor(points,'SHAPE@XY')] #List point coordinates
fieldnames = [f.name for f in arcpy.ListFields(polygon) if not (f.type.startswith('OID') or f.name.startswith('SH'))] #List polygon fields
polytemplate = [i for i in arcpy.da.SearchCursor(polygon,fieldnames+['SHAPE@'])][0] #Create a polygon template
#Insert pointcount-1 number of polygons
icur = arcpy.da.InsertCursor(polygon, fieldnames+['SHAPE@'])
for coord in coordinates[1:]:
icur.insertRow(polytemplate)
del(icur)
#Update their centroid coordinates to match the Points (I dont Think this is possible with the insertcursor, if im wrong please comment.
coords = iter(coordinates)
with arcpy.da.UpdateCursor(polygon,'SHAPE@XY') as cursor:
for row in cursor:
try:
row[0] = next(coords)
cursor.updateRow(row)
except StopIteration:
break
Before:

After:
