The Particle.dictionary property is exactly for this purpose.
You can create a custom initializer and assign a custom property to a particle. Say you want to create a bubble motion, and you need an extra "phase" property. Your initializer's initialize() method may look like this.
override initialize(particle:Particle):void {
//creates a "phase" property with a random value of 0 to 2pi
particle.dictionary["phase"] = 2 * Math.PI * Math.random();
}
In you custom action, the property can be accessed by providing the key string "phase".
override update(particle:Particle, emitter:Emitter, time:Number):void {
var p2D:Particle2D = Particle2D(particle);
p2D.x = 100 * p2D.dictionary["phase"];
}