Is it possible to access an array in a custom property in a driver?
Use self.

Assuming the driver is on the same object as property 

Have set a custom property on the object

&gt;&gt;&gt; C.object["xxxx"] = [4, 3, 2, 1]
&gt;&gt;&gt; 


Scene current frame is known to the driver namespace as "frame", and can be used in expression without setting up a scene.frame_current driver variable for it.

Set use self of the driver to true, and self is the driven object in expression.



self["xxxx"][int(frame) % 4]


Driver variables by default are floats, hence the need to typecast frame

Getting Fancy

Can add pretty much anything to the driver namespace.

A simple wrapper class with a move method using the "xxxx" custom property if defined else use a default.

import bpy

class Mover:
    def move(self, frame):
        l = self.ob.get("xxxx", [0])
        #print("debug...", ob.name, frame)
        return l[int(frame % (len(l)))]

    def __init__(self, ob):
        self.ob = ob

bpy.app.driver_namespace["Mover"] = Mover


Can now add the driver to any object

Mover(self).move(frame)


or since frame is in namespace could grab its value, with a default juuuuust in case

frame = int(bpy.app.driver_namespace.get("frame", 0))


and the driver can become

Mover(self).move()


The possibilities are endless. 

Note when using self in drivers the slow expression warning is reported, for what are the simplest of expressions. 

Use self and the slow python expression