Please have a look at the attached slide detailing the fields of an advertising packet.
According to the BLE standard, there are 31 bytes dedicated to advanced data (AD) to be inserted in the payload of an advertising packet.
Each Advanced Data (AD) has 3 fields: Length, AD_TYPE and the data itself.
You can insert any advanced data you see appropriate to add in the payload but be sure the total sum of all ADs does not exceed 31 bytes.
If you want to send 20 bytes, you just have to consider all the AD inserted in the advertising packet, knowing there are a few mandatory advanced data that always have to be included (see the list further below). You can guess those fields considering the input parameters of the ACI_GAP_SET_DISCOVERABLE function when it is called on the advertising server side.
Payload of advertising packets is built with different AD types: AD_TYPE_FLAGS, AD_TYPE_COMPLETE_LOCAL_NAME, AD_TYPE_TX_POWER_LEVEL etc.. (defined in ble_def.h). Note that AD_TYPE_FLAGS is mandatory to be discoverable.
If AD_TYPE_FLAGS is removed from advertising indication, you will see the advertising packet in the air, but the event is filtered at GAP level when aci_gap_start_general_discovery_proc is used on the scanning client side (it's the standard).
To insert advanced data in the advertising payload, you can use ACI_GAP_UPDATE_ADV_DATA function. Note updated AD replaces AD if of the same AD_TYPE. Otherwise new AD is added to already existing AD.
In pre-existing AD, AD_TYPE_FLAGS, AD_TYPE_TX_POWER_LEVEL and AD_TYPE_COMPLETE_LOCAL_NAME are always present in all advertising packets.
You can also delete an AD with the aci_gap_delete_ad_type function.