Hi Sam,
If your three vectors are all perpendicular to each other, you can just take the dot product of your vector with each of the two vectors on the plane to get local coordinates, then multiply by a rotation matrix built from the axes. Here's the method I use (If I'm starting with two vectors that aren't perpendicular).
We'll call our first two vectors v1 and v2, and the vector we want to project vProj. Also, I'm using pseudocode (I've been working in Eigen lately, so it's probably more similar to that than to pymel, but since I don't have a interpreter handy, this is the general idea for the math :)
zAxis = v1.cross( v2 ).normalized() # Perpendicular to both original vectors
yAxis = normal.cross( v1 ).normalized() # Perpendicular to the first vector and the normal
xAxis = v1.normalized()
# Now we can just project against x and y
projectedX = vProj.dot(xAxis)
projectedY = vProj.dot(yAxis)
localProjection= Vector( projectedX, projectedY, 0 )
matrix = [ xAxis[0], xAxis[1], xAxis[2], 0,
yAxis[0], yAxis[1], yAxis[2], 0,
zAxis[0], zAxis[1], zAxis[2], 0,
0, 0, 0, 1 ]
finalProjection = matrix * localProjection
That should get you most of the way :)