There's no reason that a C64 based assembler couldn't take some raw PETSCII data, literally "type it in" to BASIC, and then extract out the tokenized result and store it in to the assembled binary.
But it's most likely not worth the effort on a cross assembler beyond simply typing what you want it to a C64, doing a memory dump, and stuffing that in your assembly with reasonable documentation.
If you do little more than add a "10 SYS 12345" call to the beginning of your program, that too would be trivial to make in to a macro.
But outside of a few select BASIC statements, it's likely not worth the effort for something more general.
You could easily make a macro like: 'PRINT 10, "Hello World"', where the 10 is the line number.
A half hour with a way to dump memory should make it pretty easy to spit out a couple of handy macros without having to copy all of BASIC. Just make some rough templates, one statement per line.
Code:
ORG $4000 ; wherever it is BASIC program memory starts
BASIC_PRINT 10, "Hello world!"
BASIC_PRINT 20, "Starting up..."
BASIC_SYS 30, MYCODE
BASIC_END 40
MYCODE:
LDA #0
...
You can see the BASIC_PRINT macro some line this:
Code:
MACRO BASIC_PRINT LINE_NO, STR
.db LINE_NO
.db line_end ; pointer to next line
.db $12 ; whatever the print token is
.db $STR ; however your assembler works with strings.
$line_end:
END_MACRO
Mind, I don't know anything about the C64. But the approach should be sound.