Keeping array objects straight when duplicated along a 3D twisted curve in Blender 2.8
The code I wrote to do what I couldn't do through built-in functions is below:

import bpy

skull = bpy.data.objects["Skull"]
curve = bpy.data.objects["xobject_name"]

try:
    newCol = bpy.data.collections.new('Skulls')
    newCol = bpy.data.collections['Skulls']
    # link the newCol to the scene
    bpy.context.scene.collection.children.link(newCol)
except:
    print ("safely ignore")

skull_copy = []
for index, point in enumerate(curve.data.splines[0].points):
    if (index % 2 == 0):
        print (index, point.co)
        skull_copy.append(skull.copy())
        skull_copy[-1].data = skull.data.copy()
        #bpy.context.scene.collection.objects.link(skull_copy[-1])
        newCol.objects.link(skull_copy[-1])
        skull_copy[-1].location[0] = point.co[0] + skull.location[0]
        skull_copy[-1].location[1] = point.co[1] + skull.location[1]
        skull_copy[-1].location[2] = point.co[2] + skull.location[2]