chyba troche jasniej juz to napisales 
jezeli chodzi o pierwszy przypadek , czyli tabelaA_tabelaB hasMany tabelaA i tabelaB, to chyba najlepszym rozwiazaniem, zgodnym z dotkryna caka jest relacja hasAndBelongsToMany, czyli tworzysz modele mniej wiecej tak :
class tabela_A extends AppModel {
....
var $hasAndBelongsToMany = array('tabela_AB')
}
-------------------------------------
class tabela_B extends AppModel {
}
-------------------------------------
class tabela_AB extends AppModel {
....
var $belongsTo = array('tabela_A','tabela_B')
}
-------------------------------------
class tabela_C extends AppModel {
}
-------------------------------------
class tabela_ABC extends AppModel {
....
var $hasMany = array('tabela_AB','tabela_C')
}
-------------------------------------
jezeli odwolujac sie z tabeli A chcesz uzyskac wszystkie rekordy z tabeli AB ( a co za tym idzie takze z tabeli B to relacje HABTM umiesc w tabeli A, jezeli z tabeli B...to HABTM w tabeli B).
Natomiast jezeli chodzi o tabele ABC oraz C i ich relacje z tabela AB to chyba cake Ci na to nie pozwoli, poniewaz w tabeli AB (HABTM) mozna miec kolumny skladajace sie z 'id', 'tabela_A_id', 'tabela_B_id'...i nic wiecej.
Chociaz nie do konca 
prosze przeczytaj ten artykul, moze rzuci inne swiatlo na Twoj problem :
http://debuggable.com/posts/modeling-re … accbdd56cb
powodzonka