I believe I found a bug in the code in the meantime. I think this method is not supposed to return multiple AudioChannelLayout structs, but just one with the right number of channels. It's a variable length struct (= very bad style IMHO).
I tried to come up with working code, but no success so far. From past experience with creating an AU wrapper I believe this method is best left alone unless it's really absolutely needed. This is even recommended by Apple. If you look at the apple code there is a description of what the method should do and I don't think this is implemented correctly now.
Return true for writable probably means the plugin can reconfigure for any layout. And the comment says the plugin is expected to return the currently used ACL, not create one from scratch. So if a plugin supports multiple layouts (such as mono/stereo), it probably shouldn't return the same thing for every call.
// As the AudioChannelLayout can be a variable length structure
// (though in most cases it won't be!!!)
// The size of the ACL is always returned by the method
// if outMapPtr is NOT-NULL, then AU should copy into this pointer (outMapPtr) the current ACL that it has in use.
// the AU should also return whether the property is writable (that is the client can provide any arbitrary ACL that the audio unit will then honour)
// or if the property is read only - which is the generally preferred mode.
// If the AU doesn't require an AudioChannelLayout, then just return 0.
UInt32 AUIOElement::GetAudioChannelLayout (AudioChannelLayout *outMapPtr, Boolean &outWritable)