Falling back to Parent Category if no asset exists
entry.brandFeature.one()


Is correct, you'll access the asset field and execute the one() function in order to fetch the asset.

entry.category.one()


Is correct too. You'll fetch the first category of your categories field

entry.category.one().categoryImage


Will access the categoryImage asset field of your category.

But then you do

categoryImage.getUrl()


So you try to get the url from the field value but you don't actually grab the asset that might be stored in the category.

categoryImage.one().getUrl()


However - keep in mind there could be entries without a category. Then you'll receive an error as well.