Hi
There are several ways to do that. I think that if you want to have something like Java classes, behaviors are probably the way to go.
I would personally put all the static data (like the list of animations and so on) together with the map data (with all the map data in its own json file). Then you can give the witch a Witch behavior that handles all the things that the witch does, using an onAddToScene function to do the scene object initialization. In my opinion that's the cleanest way of doing it, totally separating data and code. But that's personal preference.
If you want to have all the static data for the witch in the same file too, that's also possible. In fact, you could simply move all the code that relates to the witch to a witch.js file, and use wade.loadScript('witch.js') from you main app file. If you give each object a unique name, it's totally fine to handle objects in separate files - if you need to get a reference to the witch object from another file, you can simply do
var myWitch = wade.getSceneObject('witch');
So basically you don't need to pass variables that reference the witch from one file to another, just use unique names and wade.getSceneObject (which is really fast).
Note that, by default, wade.loadScript loads a script and executes it right away, but you can also pass a parameter to it, to load the script without executing. You can then execute the script when it's more appropriate with
eval(wade.getScript('aScriptWeLoadedBefore.js'));
As a side note, you can also use wade.getSceneObjects to get all the objects of a same type, as you can use it to select all objects that have a given key/value pair. So for example, if every time you create a flower you do:
var flower = wade.iso.createObject(flowerData, flowerPosition, {type: 'flower'});
Then from any file in your app, you can do this to get a list of all the flowers in the scene:
var allFlowers = wade.getSceneObjects('type', 'flower');