Well you CAN acces multi data with getAttr, make multiAttrs with addAttr and set them with setAtt. And yes that means you could push the data elsewhere and blend it. Not totaly optimal but its damn close enough. BUt yeah it would be better if the data was stored in the object structure itself.
And yes you can make yur own attributes painttable wherer they are (take a look at the mel command fle for makePainttable how to paint particle attrs and own custom ones). And no you dont need to amke a cirpt for all you cuutom apps separately. What you do is serialize the script so much that you can easily pick what you wnat to paoint trough the gui!
But yes that means you can (easily) transfer data from skinweights to particlke data for example, or vertex color or whatever.
The real problem of this storage modell becomes evident only if you delete componenets to create a reduced area but want to use the same binding now you need to start deleting those damn weights manualy. Its not a aterribly big deal to handle tough but still pain in the butt.
And yes all the nodes that have per point weighting available can be painted. Wich after maya 7 finaly includes also the blend shape.
Ok so let me demonstreate (dont be afraid of script ist NOT tedious ist just a matter of building a gui and tehn using it forever, after all maya gui IS mainly script), this is there for those of you who want to get jumpstarted TODAY and not wait for maya XXXXXX wich may never come.
to create a multi attribute, let us do following:
addAttr -longName weightTest -shortName wt -at compound -numberOfChildren 1 -multi nurbsSphere1;
addAttr -longName weights -shortName w -attributeType double -multi -parent weightTest;
now this is a multi compound containing a multiple entrys of double arrays. Now incidentaly this is exactly the same datatype as a skicluster uses to store wich means a sckincluster can connect it to thsi data. And it can be made painttable. NOw thees nothing that states a gui for this couldnt be done sure it can.
Now for blending wich is a bit trickyer, especialy if you want the blend to work in dag context (in wich case its api time, but only then) if not then ist pretty easy. Asuming theres 2 skincluters thst are identcal following applys:
$skinWeights1=getAttr skinCluster1.weightList[0:(getAttr("-s","skinCluster1.weightList")-1)].weights[0:(getAttr("-s","skinCluster1.weightList[0].weights")-1)]
$skinWeights2=getAttr skinCluster2.weightList[0:(getAttr("-s","skinCluster2.weightList")-1)].weights[0:(getAttr("-s","skinCluster2.weightList[0].weights")-1)]
now we have 2 ayyas containing all the weights. So now if you wanted to copy weight 1 to weight 2 youd:
$string="setAttr skinCluster2.weightList[0:70].weights[0:2] ";
//ive intentinaly expanded the ranges so it looks shorter theres no need to
for ($item in $skinWeights1)
$string+=($item+" ");
eval $string;
or blend the sets
$string="setAttr skinCluster2.weightList[0:70].weights[0:2] ";
$size=size($skinWeights1);
for ($i=0;$i<$size;$i++)
$string+=(($skinWeights1[$i]0.3+$skinWeights2[$i]0.7)+" ");
//0.3 and 0.7 are the weighted blends
eval $string;
Hope this helps your work! Ill leave you to experiment with the rest, the blend above works nice within a dragger context making it pssible for you to do the blend by sliding the mouse Now i leave thsi and make painttable for you to do for yourself.